package logger

import (
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
)

const (
	// RequestIDKey 用于在 gin.Context 中存储请求ID的key
	RequestIDKey = "RequestId"
	// LoggerKey 用于在 gin.Context 中存储logger的key
	LoggerKey = "Logger"
)

// WithRequestID 返回一个带有请求ID的logger
// 这是获取带追踪信息的logger的推荐方式
func WithRequestID(c *gin.Context, requestID string) *zap.Logger {
	return GetLogger().With(
		zap.String("request_id", requestID),
	)
}

// GetLoggerFromContext 从gin.Context中获取logger
// 如果没有设置，则返回默认logger
func GetLoggerFromContext(c *gin.Context) *zap.Logger {
	if l, ok := c.Get(LoggerKey); ok {
		if logger, ok := l.(*zap.Logger); ok {
			return logger
		}
	}
	return GetLogger()
}

// SetLoggerToContext 将logger设置到gin.Context中
func SetLoggerToContext(c *gin.Context, logger *zap.Logger) {
	c.Set(LoggerKey, logger)
}
